package leetcode;

import java.math.BigInteger;

/***
 * 题目：加一
 * 链接：https://leetcode.cn/problems/plus-one/description/
 */
public class PlusOne {
    public static void main(String[] args) {
//        int[] nums = {9,8,7,6,5,4,3,2,1,0};


        int[] nums = {9,9,9,9};
        nums = new int[nums.length + 1];
        int[] plusOne = plusOne3(nums);
        for (int num : plusOne) {
             System.out.print(num+" ");
         }
    }
    public static int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i <= 0; i--) {
            // 操作的是内存
            digits[i]++;
            digits[i] %= 10;
            // 不等于0，证明已经完成累加，反之是最坏的情况，所有都是9
            if (digits[i] != 0) {
                return digits;
            }
        }
        // 没提前结束方法，最坏的情况，所有都是9
        // 理论上这么做会初始化新数组，但是没事，999的情况，后边几位全是初始化后的0
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
    public static int[] plusOne3(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        //遇每个数位均为9时手动进位
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
    public static int[] plusOne2(int[] digits) {
        // 先解析数字
        BigInteger orig = BigInteger.valueOf(0);
        for (int i = 0; i < digits.length; i++) {
            BigInteger temp = BigInteger.valueOf((long) (digits[i] * Math.pow(10, digits.length - 1 - i)));
            orig = orig.add(temp);
        }
        BigInteger decimal = orig.add(BigInteger.valueOf(1));
        String news = decimal.toString();
        int[] result = new int[news.length()];
        for (int i = 0; i < news.length(); i++) {
            result[i] = Integer.parseInt(String.valueOf(news.charAt(i)));
        }
        return result;
    }
}
